home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Light ROM Gold
/
Light ROM Gold.iso
/
arexx
/
standin1.rex
< prev
next >
Wrap
OS/2 REXX Batch file
|
1995-03-23
|
3KB
|
118 lines
/*STANDIN.LWM v1.0 Supposedly constructs a simplified version of an object.*/
/* This takes some time, so be patient. The result is a */
/* "enhanced bounding box", very useful for debuggin */
/* motion paths. */
/****************************************************************************/
/* Must be launched from LWModeler Macro requestor. Uses Booleans, so is */
/* slow. I highly recommend NOT using sampling values greater than 5. */
/* But hey, it is your time. */
/****************************************************************************/
libadd = addlib("LWModelerARexx.port",0)
/*signal on error
signal on syntax*/
sample=3
sysnam="Standin Object Maker"
call addlib "rexxsupport.library", 0, -30, 0
call addlib "rexxmathlib.library", 0, -30, 0
call addlib "LWModelerARexx.port", 0
/* Ask user how many divisions. */
call req_begin sysnam
divx_r = req_addcontrol("Divisions on X axis",'N',0)
divy_r = req_addcontrol("Divisions on Y axis",'N',0)
divz_r = req_addcontrol("Divisions on Z axis",'N',0)
call req_setval divx_r, sample
call req_setval divy_r, sample
call req_setval divz_r, sample
if (~req_post()) then do
call req_end
exit
end
divx = req_getval(divx_r)
divy = req_getval(divy_r)
divz = req_getval(divz_r)
call REQ_END()
/* Make them integers. */
divx=divx%1
divy=divy%1
divz=divz%1
/* Find empty layers */
empty = emptylayers()
if (words(empty) < 2) then do
call notify 1,"!Need 2 empty layers","!for this operation."
exit
end
boxlayer = word(empty, 1)
acclayer = word(empty, 2)
/* Find active layers */
active=CURLAYER()
/* Find upper & lower bounds */
boxdata=BOUNDINGBOX()
parse var boxdata n minx maxx miny maxy minz maxz
/* Now, make them slightly bigger, using LWM functions. */
CALL SETLAYEr(boxlayer)
call MAKEBOX(minx miny minz ,maxx maxy maxz )
middlex=minx+((maxx-minx)/2)
middley=miny+((maxy-miny)/2)
middlez=minz+((maxz-minz)/2)
CALL SCALE(1.01 1.01 1.01 , middlex middley middlez)
/* Retrieve slightly larger values. */
boxdata=BOUNDINGBOX()
parse var boxdata n minx maxx miny maxy minz maxz
call CUT() /* Get rid of it. */
width=maxx-minx
widthinc=width/divx
heigth=maxy-miny
heigthinc=heigth/divy
depth=maxz-minz
depthinc=depth/divz
lcornerx=minx /*initializing box coordinates */
lcornery=miny
lcornerz=minz
/* Start construction of boxes */
total= ((divx*divy)*divz)%1 /* Make it an integer. Better ways? */
DO x=1 to divx
ucornerx=lcornerx+widthinc
DO y=1 to divy
ucornery=lcornery+heigthinc
DO z=1 to divz
ucornerz=lcornerz+depthinc
CALL SETLAYER(boxlayer)
CALL MAKEBOX( lcornerx lcornery lcornerz , ucornerx ucornery ucornerz)
CALL SETBLAYER(active)
CALL BOOLEAN('INTERSECT')
box=boundingbox() /* Should check out empty list... */
parse var box n x1 x2 y1 y2 z1 z2
CALL CUT()
CALL SETLAYER(acclayer)
CALL MAKEBOX(x1 y1 z1,x2 y2 z2)
lcornerz=ucornerz
end
lcornerz=minz
lcornery=ucornery
end
lcornery=miny
lcornerx=ucornerx
end
CALL SETLAYER(acclayer)